package org.moonlight.redis.limit.controller;

import org.moonlight.redis.limit.annotation.AccessLimit;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试controller
 * @author Moonlight
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public Map<String, Object> info(@PathVariable(name = "id") String id) {
        Map<String, Object> res = new HashMap<>(8);
        res.put("id", id);
        res.put("name", "moonlight");
        res.put("desc", "qwertyuiopasdfghjklzxcvbnm");
        return res;
    }

    /** 默认配置, 同一个IP60秒只允许请求5次**/
    @AccessLimit
    @GetMapping("/def")
    public String def() {
        return "默认配置, 同一个IP60秒只允许请求5次";
    }

    /** 180秒内所有人加起来只允许请求三次 **/
    @AccessLimit(maxCount = 3, second = 90, strategy = AccessLimit.AccessLimitStrategy.ALL_REQUEST)
    @GetMapping("/all")
    public String all() {
        return "90秒内所有人加起来只允许请求三次";
    }

    /** 这个地方不生效，因为拦截器配置项中，排除了这个路径 **/
    @AccessLimit
    @GetMapping("/login")
    public String login() {
        return "登录成功123";
    }

}